package com.br.negocio.web.backbean;

import java.io.Serializable;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.br.negocio.controller.ControllerPais;
import com.br.negocio.vo.PaisVO;
import com.br.negocio.web.formbean.PaisFormBean;

@Controller("paisBackBean")
@Scope("session")
public class PaisBackBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Resource
	private ControllerPais controllerPais;
	
	private PaisFormBean paisFormBean;

	public PaisBackBean() {
		super();
		this.paisFormBean = new PaisFormBean();
	}

	public PaisFormBean getPaisFormBean() {
		return this.paisFormBean;
	}

	public void setPaisFormBean(PaisFormBean paisFormBean) {
		this.paisFormBean = paisFormBean;
	}
	
	// M�TODOS

	public void obterListaPais() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.paisFormBean.setListaPais(this.controllerPais.obterListaPais());
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao obter a lista de pa�ses: " + e.getMessage()));
		}
	}
	
	public void manterPais() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.controllerPais.atualizarPais(this.paisFormBean.getPaisManter());
			this.paisFormBean.setIsDisabled(true);
			context.addMessage(null, new FacesMessage("Sucesso: Inser��o realizada com sucesso!"));
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao manter o pa�s: " + e.getMessage()));
		}

	}
	
	public void excluirPais() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			if (this.getPaisFormBean().getPaisManter().getCodigo() != 0) {
				this.controllerPais.removerPais(this.paisFormBean.getPaisManter());
				if (!this.paisFormBean.getListaPais().isEmpty()) {
					this.paisFormBean.setListaPais(this.controllerPais.obterListaPais());
				}
				this.paisFormBean.setPaisManter(new PaisVO());
				context.addMessage(null, new FacesMessage("Sucesso: Pa�s exclu�do com sucesso!"));
			}
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao excluir o pa�s: " + e.getMessage()));
		}
	}
	
	// LISTENERS
	
	public void listenerIrInserirPais(ActionEvent evento) {
		this.paisFormBean.setPaisManter(new PaisVO());
		this.paisFormBean.setIsDisabled(false);
		this.paisFormBean.setHead("Cadastrar Pais");
	}
	
	public void listenerIrExcluirPais(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoPaisExcluir");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			PaisVO paisVO = new PaisVO();
			paisVO.setCodigo(codigo);
			this.paisFormBean.setPaisManter(this.controllerPais.obterPais(paisVO));
		}
		this.paisFormBean.setHead("Excluir Pais");
		this.paisFormBean.setIsDisabled(true);
	}
	
	public void listenerIrEditarPais(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoPaisEditar");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			PaisVO paisVO = new PaisVO();
			paisVO.setCodigo(codigo);
			this.paisFormBean.setPaisManter(this.controllerPais.obterPais(paisVO));
		}
		this.paisFormBean.setHead("Editar Pais");
		this.paisFormBean.setIsDisabled(false);
	}

}
